perm filename MANHDR.TEX[TEX,DEK] blob
sn#706327 filedate 1983-04-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 % This file is used for experiments on the new TeX manual format
C00011 00003 % Page layout
C00019 00004 % Chapter formatting
C00023 00005 % The next few lines, if present, should go into PLAIN once they're tested:
C00042 00006 % Macros for drawing figures (leave out of Appendix E)
C00046 00007 % indexing macros
C00049 00008 % internal cross references that may change
C00050 ENDMK
C⊗;
% This file is used for experiments on the new TeX manual format
% Font definitions
\newfam\oldfam
\ifnum\oldfam=8\else\error\fi % 8 is assumed in Greek definitions here
\newfam\calfam
\let\oldtenrm=\tenrm % very temporary substitutions during font development
\font\oldeightsss=cmsss8
\textfont\oldfam=\oldtenrm
\mathchardef\Omega"780A
\mathchardef\Psi"7809
\mathchardef\Phi"7808
\mathchardef\Upsilon"7807
\mathchardef\Sigma"7806
\mathchardef\Pi"7805
\mathchardef\Xi"7804
\mathchardef\Lambda"7803
\mathchardef\Theta"7802
\mathchardef\Delta"7801
\mathchardef\Gamma"7800
\let\oldmapsto=\mapstochar
\def\varepsilon{\hbox{\sixsy E}}
\def\varsigma{\lower1pt\hbox{\fivesy S}}
\def\cal{\fam\calfam}
\font\oldtensy=cmsy10
\font\oldninesy=cmsy9
\font\inchhigh=aminch
\font\titlefont=ambig
\font\ninerm=cmr9
\font\eightrm=cmr8
\font\sixrm=cmr6
\font\ninei=cmi9
\font\eighti=cmi8
\font\sixi=cmi6
\font\ninesy=amsy9
\font\eightsy=amsy8
\font\sixsy=amsy6
\font\eightss=cmss8
\font\eightsss=amsss8 % currently best version, lacks Greek
\font\ninebf=cmb9
\font\eightbf=cmb8
\font\sixbf=cmb6
\font\ninett=cmtt9
\font\eighttt=cmtt8
\font\ninesl=cms9
\font\eightsl=cms8
\font\nineit=cmti9
\font\eightit=cmti8
\font\tenu=cmu10 % unslanted italic
\font\magnifiedfiverm=cmr5 at 10pt
\font\manual=manfnt % font used for the METAFONT logo and special symbols
\font\tenrm=amr10 % temporary substitutions during font development
\font\tentt=amtt
\let\oldtenbf=\tenbf
\font\tenbf=ambx10
\let\mainfont=\tenrm
\textfont0=\tenrm
\let\oldninerm=\ninerm
\font\ninerm=amr9
\def\tenpoint{\def\rm{\fam0\tenrm}%
\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
\def\it{\fam\itfam\tenit}%
\textfont\itfam=\tenit
\def\sl{\fam\slfam\tensl}%
\textfont\slfam=\tensl
\def\bf{\fam\bffam\tenbf}%
\textfont\bffam=\oldtenbf \scriptfont\bffam=\sevenbf
\scriptscriptfont\bffam=\fivebf
\def\tt{\fam\ttfam\tentt}%
\textfont\ttfam=\tentt
\textfont\calfam=\oldtensy % temporary patch for slanted \cal
\def\normalbaselines{\baselineskip 12pt \lineskip 1pt \lineskiplimit 0pt }%
\let\sc=\eightrm
\let\big=\tenbig
% \dispskip 12pt plus 3pt minus 9pt
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
\normalbaselines\rm}
\def\ninepoint{\def\rm{\fam0\ninerm}%
\textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
\textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
\textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
\def\it{\fam\itfam\nineit}%
\textfont\itfam=\nineit
\def\sl{\fam\slfam\ninesl}%
\textfont\slfam=\ninesl
\def\bf{\fam\bffam\ninebf}%
\textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
\scriptscriptfont\bffam=\fivebf
\def\tt{\fam\ttfam\ninett}%
\textfont\ttfam=\ninett
\textfont\calfam=\oldninesy % temporary patch for slanted \cal
\def\normalbaselines{\baselineskip 11pt \lineskip 1pt \lineskiplimit 0pt }%
\let\sc=\sevenrm
\let\big=\ninebig
% \dispskip 11pt plus 3pt minus 8pt
\setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
\normalbaselines\rm}
\def\eightpoint{\def\rm{\fam0\eightrm}%
\textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
\def\it{\fam\itfam\eightit}%
\textfont\itfam=\eightit
\def\sl{\fam\slfam\eightsl}%
\textfont\slfam=\eightsl
\def\bf{\fam\bffam\eightbf}%
\textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
\scriptscriptfont\bffam=\fivebf
\def\tt{\fam\ttfam\eighttt}%
\textfont\ttfam=\eighttt
\def\normalbaselines{\baselineskip 9pt \lineskip 1pt \lineskiplimit 0pt }%
\let\sc=\sevenrm
\let\big=\eightbig
% \dispskip 9pt plus 2pt minus 6pt
\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
\normalbaselines\rm}
% Page layout
\hsize 29pc \vsize 44pc \maxdepth 2.2pt \parindent 3pc
\edef\pagewidth{\the\hsize} \edef\pageheight{\the\vsize}
\def\ruleht{.5pt}
\abovedisplayskip 6pt plus 3pt minus 1pt
\belowdisplayskip 6pt plus 3pt minus 1pt
\abovedisplayshortskip 0pt plus 3pt
\belowdisplayshortskip 4pt plus 3pt
%\newinsert\footins
\def\footnote#1#2{{\edef\sf{\the\spacefactor}#1% that's the reference symbol
\insert\footins{\interlinepenalty100 \let\par=\endgraf
\splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000
\eightpoint\smallskip\item{#1}\strut#2\strut}%
\spacefactor=\sf}}
\setskip\footins=12pt plus 2pt minus 4pt % space added when footnote is present
%\setcount\footins=1000 % footnote magnification factor (1 to 1)
\setdimen\footins=30pc % maximum footnotes per page
%\newinsert\trailer
%\setskip\trailer=12pt plus 20pc minus 4pt % white space before closing quotes
%\setcount\trailer=1000
%\setdimen\trailer=\pageheight
\newinsert\margin
\setdimen\margin=10000pt
\newswitch{title}
\titlefalse % \iftitle will be true for pages without heading
\def\titlepage{\global\titletrue}
\def\rhead{} % \rhead contains the running headline
\def\pagenumber{\ifnum\count0<0 \romannumeral-\count0
\else\number\count0 \fi}
\def\leftheading{\hbox to \pagewidth{%
\vbox to 10pt{}% strut to position the baseline
\llap{\tenbf\pagenumber\hskip1pc}% folio to left of text
\tenit\rhead\hfil% running head flush left
}}
\def\rightheading{\hbox to \pagewidth{%
\vbox to 10pt{}% strut to position the baseline
\hfil\tenit\rhead% running head flush right
\rlap{\hskip1pc\tenbf\pagenumber}% folio to right of text
}}
\def\onepageout#1{\shipout\vbox{ % here we define one page of output
\baselineskip=0pt\lineskip=0pt % butt the boxes together
\vbox to 3pc{ % this part goes on top of the 44pc pages
\iftitle % the next is used for title pages
\global\titlefalse % reset \tpage
% on title pages we set corner rules for camera alignment
% because of "sinkage" (put this term in the index)
\hbox to \pagewidth{\vrule width 1pc height\ruleht \hfil
\vrule width 1pc}
\hbox to \pagewidth{\llap{\sevenrm(page \pagenumber)\hskip 1pc}%
\vrule height1pc width\ruleht depth0pt
\hfil \vrule width\ruleht depth0pt}
\else\ifodd\count0 \rightheading\else\leftheading\fi\fi
\vfill} % this completes the \vbox to 3pc
\vbox to \pageheight{
\ifvoid\margin\else % marginal info is present
% \moveright 31pc\vbox to 0pt{\vskip4pt\box\margin \vss}\fi
\rlap{\hskip31pc\vbox to 0pt{\vskip4pt\box\margin \vss}}\fi
#1 % now insert the main information
% \ifvoid\trailer\else % trailer info is present
% \ifeven0\vfill % trailer is placed only on odd-numbered pages
% \else\vskip\skip\trailer \box\trailer\fi\fi
\ifvoid\footins\else % footnote info is present
\vskip\skip\footins \vskip-3pt
\hrule height\ruleht width\pagewidth \vskip-\ruleht \vskip3pt
\unvbox\footins\fi
\boxmaxdepth=\the\maxdepth
} % this completes the \vbox to \pageheight
}
\bumppagenumber}
\output{\onepageout{\unvbox255}
% \ifvoid\trailer\else\onepageout{}\fi
}
\def\indexoutput{} % to be defined in due time
% Chapter formatting
% The preface and table of contents are formatted in place, not here
\newcount\exno % for the number of exercises in the current chapter
\newcount\subsecno % for the number of subsections in the current chapter
\outer\def\beginchapter#1 #2#3. #4\par{\global\setcount\exno=0
\setcount\subsecno=0
\def\chapno{#2#3}
\ifodd\count0
\errmessage{You had too much text on that last page; I'm backing up}
\advcount0 by -1 \fi
\titlepage
\def\\{ } % \\'s in the title will be treated as spaces
\message{#1 #2#3:} % show the chapter title on the terminal
\xdef\rhead{#1 #2#3: #4}
{\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X}
\def\\{#3}
\ifx\empty\\ \rightline{\inchhigh #2\kern-.04em}
\else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi
\vskip 1.75pc
\baselineskip 36pt \lineskiplimit 1pt \lineskip 12pt
\let\\=\cr % now the \\'s are line dividers
\halign{\hbox to\the\hsize{\titlefont\hfil##}\\#4\unskip\\}
\vfill\eject} % output the chapter title page
\tenpoint
\noindent\ignorespaces} % First paragraph of chapter is not indented
%\outer\def\endchapter{\begingroup\obeylines\gatherquotes}
%\long\def\gatherquotes#1\eject{\vfill
% \eightpoint
% \parfillskip 0pt
% \leftskip\the\parindent plus 40pc
% \let\rm=\eightss \let\sl=\eightsss
% \everypar{\sl}
% \null\insert\trailer{\vbox{#1}}
% \eject\endgroup}
\outer\def\endchapter{\ifodd\count0 \else\vfill\eject\null\fi
\begingroup\bigskip\vfill % beginning of the quotes
\def\eject{\endgroup\eject}
\def\par{\ifhmode\/\endgraf\fi}\obeylines
\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
\eightpoint \let\tt=\ninett
\baselineskip 10pt
\parfillskip 0pt
\interlinepenalty 10000
\leftskip 0pt plus 40pc minus \the\parindent
\let\rm=\eightss \let\sl=\eightsss
\everypar{\sl}}
\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)}
% The next few lines, if present, should go into PLAIN once they're tested:
% end of the PLAIN test material
% Composition macros
\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections
\def\AmSTeX{\strut$\cal A\kern-.1667em\lower.424ex\hbox{$\cal M$}
\kern-.125em S$-\TeX}
\let\lb={ \let\rb=}
\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\shutoffspace$}}}
\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
\left#1\vbox to7.25pt{}\right.\shutoffspace$}}}
\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
\left#1\vbox to6.5pt{}\right.\shutoffspace$}}}
\hyphenation{man-u-script man-u-scripts ap-pen-dix}
\newswitch{proofmode}
\proofmodetrue % this should be false when making camera-ready copy
\def\parbreak{\hfil\break\indent}
\def\MF{{\manual META}\-{\manual FONT}}
\def\cstok#1{\thinspace\hbox{\vrule\vtop{\vbox{\hrule\vskip1pt
\hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}
\vskip1pt\hrule}\vrule}\thinspace}
{\catcode`\ =13 \gdef\activespaces{\catcode`\ =13\def {\ }\relax}}
\def\<#1>{\hbox{$\langle$#1$\rangle$}}
\def\oct#1{\hbox{\rm\char'16\kern-.2em\it#1\/\kern.05em}} % octal constant
\def\hex#1{\hbox{\rm\char'26\tt#1}} % hexadecimal constant
\def\pt{\,{\rm pt}} % units of points, in math formulas.
\def\stretch{{\nobreak\hskip0pt plus2pt}} % a little stretchability, in a pinch
% macros for non-centered displays
\newdimen\next
\setdimen\next=\the\hsize
\advdimen\next by \minusthe\parindent
\advdimen\next by \minusthe\parindent
\edef\dbox{\hbox to\the\dimen\next}
\divdimen\next by 58 \varunit=\the\dimen\next % illustrations in Ch.12
\def\display#1${\dbox{$\displaystyle{#1}$\hss}$}
%\def\displaybox#1{\dbox{#1\hss}}
%\def\displayvbox#1{\dbox{\vbox{#1}\hss}}
\def\finishdisplay#1{\hss\rb$$}
%\let\math=$
{\catcode`$=13
% \gdef\display{\catcode`$=13 \def${\rb\math\finishdisplay}%
% \dbox\lb\math\displaystyle\lb}
\gdef\displaybox#{\ddefs\lb\catcode`$=3 \let\next}
\gdef\displayvbox#{\ddefs\vbox\lb\catcode`$=3 \let\next}
\gdef\ddefs{\catcode`$=13 \let$=\finishdisplay \dbox\lb}
}
%\def\haligntrick#1{\halign{\span\if01}\fi\relax\ifnum0=`{\fi#1\cr
% \noalign{\ifnum0=`}\fi}}
\def\beginmathdemo{$$\setskip0=\the\baselineskip \advskip0 by2pt
\baselineskip=\skip0
\halign\lb\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
\def\begindisplaymathdemo {$$\setskip0=\the\baselineskip \advskip0 by15pt
\baselineskip=\skip0
\halign\lb\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr
\noalign{\vskip-15pt}}
\def\beginlongmathdemo{$$\setskip0=\the\baselineskip \advskip0 by2pt
\baselineskip=\skip0
\halign\lb\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
\def\beginlongdisplaymathdemo {$$\setskip0=\the\baselineskip \advskip0 by15pt
\baselineskip=\skip0
\halign\lb\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr
\noalign{\vskip-15pt}}
\def\endmathdemo{\rb$$}
%{\obeylines\gdef\gobblecr#1
% {}}
% macros for verbatim scanning
\def\endlist{\endlist}
\def\uncatcode#1{\ifx#1\endlist\let\next=\relax
\else\catcode`#1=12 \let\next=\uncatcode\fi\next}
\def\ttverbatim{\begingroup
\expandafter\uncatcode\specials % all catcodes but \| are now 11 or 12
\parskip 0pt
\activespaces \obeylines \ttdefs}
{\catcode`\_=13 \catcode`\↑=13 \catcode`\~=13 \catcode`\↓=13
\gdef\ttdefs{\catcode`\_=13 \chardef_='32
\catcode`\↑=13 \chardef↑='17
\catcode`\~=13 \chardef~='24
% \catcode`\↓=13 \chardef↓='176
% \ifmath \def↑{{\char'136}}\fi
\tt}}
%\let\ifmath=\no % when this is \yes, we get up-arrows instead of circumflexes
\def\begintt{$$\let\par=\endgraf \ttverbatim
\catcode`\|=0 \rightskip-5pc \ttfinish}
{\catcode`\|=0 |catcode`|\=12 % | is temporary escape character
|obeylines % end of line is active
|gdef|ttfinish#1↑↑M#2\endtt{|vbox{#2}|endgroup$$}}
\catcode`\|=13
\def\ttglue{.5em plus .25em minus .15em}
{\catcode`\↑↑M=13
\gdef|{\ttverbatim \spaceskip\ttglue \let↑↑M=\ \let|=\endgroup}}
\def\ttspace{{\tt\hskip\ttglue}}
\def\vrt{\hbox{\tt\char`\|}} % vertical line
\def\dn{\hbox{\tt\char'176}} % downward arrow
\def\up{\hbox{\tt\char'136}} % upward arrow
\def\]{\hbox{\tt\char`\ }} % visible space
\newwrite\ans
\immediate\openout\ans=answers % file for answers to exercises
\def\answer{\par\medbreak
\immediate\write\ans{}
\immediate\write\ans{\string\ansno\chapno.\the\count\exno:}
\copytoblankline}
\def\copytoblankline{\begingroup\setupcopy\copyans}
\def\setupcopy{\expandafter\uncatcode\specials \catcode`\|=12 \obeylines}
\begingroup\obeylines % carriage-returns are active
%\gdef\defendans#1↑↑M#2↑↑M{\gdef\endans{#2}\endgroup} %
\gdef\copyans#1↑↑M{\def\next{#1}%
% \ifx\next\endans\let\next=\endgroup %
\ifx\next\empty\let\next=\endgroup %
\else\immediate\write\ans{\next} \let\next=\copyans\fi\next} %
% the next two lines define \endans as a sentinel for \answer
%\defendans
\endgroup
\def\ansno#1.#2:{\medbreak\noindent
\hbox to\the\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
\def\figure#1#2{$$\dbox{\vbox to #1{\ifproofmode\hrule\vfill
\hsize=2.5in \baselineskip 6pt \fiverm\noindent #2
\vfill\hrule\fi}\hss}$$}
\outer\def\exercise{\medbreak
\global\advcount\exno by 1
\noindent\llap{\manual\char'170\hskip.15em}% triangle in margin
{\ninebf EXERCISE \bf\chapno.\the\count\exno}\par\nobreak\noindent}
\def\dexercise{\global\advcount\exno by 1
\llap{\manual\char'170\hskip.15em}% triangle in indented space
{\eightbf EXERCISE \bf\chapno.\the\count\exno}\hfil\break}
\outer\def\dangerexercise{\danger \dexercise}
\outer\def\ddangerexercise{\ddanger \dexercise}
\newcount\chalcount \setcount\chalcount=0
\outer\def\challenge{\danger\chall}
\outer\def\cchallenge{\ddanger\chall}
\def\chall{\global\advcount\chalcount by1
\dexercise \hbox{Challenge number \the\count\chalcount:\enskip}\ignorespaces}
\outer\def\danger{\medbreak\begingroup\def\par{\endgraf\endgroup\medbreak}
\clubpenalty10000\noindent\hang\hangafter-2
\hbox to 0pt{\hskip\minusthe\hangindent\manual\char127\hfill}\ninepoint}
\outer\def\ddanger{\medbreak\begingroup\def\par{\endgraf\endgroup\medbreak}
\clubpenalty10000\noindent\hang\hangafter-2
\hbox to 0pt{\hskip\minusthe\hangindent\manual\char127\kern1pt\char127
\hfill}\ninepoint}
\def\enddanger{\endgraf\endgroup} % omits the \medbreak
\outer\def\subsection#1. {\medbreak\advcount\subsecno by 1
\noindent{\it \the\count\subsecno.\enspace#1.\enspace}}
\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
\def\SS{{\it SS}} % scriptscript style
% Note: I should go through and change "f |\" and "f ↑{*" and "f ↑{:" to f\/
% Macros for drawing figures (leave out of Appendix E)
\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 }
\def\hidevrule#1#2{\kern-#1{\setdimen0=#1
\advdimen0 by#2\vrule width1dm0}\kern-#2 }
% \makeblankbox puts rules at the edges of a blank box
% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp)
% #1 is rule thickness outside, #2 is rule thickness inside
\def\makeblankbox#1#2{\hbox{\lower1dp0\vbox{\hidehrule{#1}{#2}%
\kern-#1 % overlap the rules at the corners
\hbox to 1wd0{\hidevrule{#1}{#2}%
\raise1ht0\vbox to #1{}% set the vrule height
\lower1dp0\vtop to #1{}% set the vrule depth
\hfil\hidevrule{#2}{#1}}%
\kern-#1\hidehrule{#2}{#1}}}}
\def\maketypebox{\makeblankbox{0pt}{1pt}}
\def\makelightbox{\makeblankbox{.2pt}{.2pt}}
% \box\bigdot is a null box with a bullet at its reference point
\newbox\bigdot \newbox\smalldot
\setbox0=\hbox{$\vcenter{}$} % ht0 is the axis height
\setbox1=\hbox to 0pt{$\hss\bullet\hss$} % bullet is centered on the axis
\setbox\bigdot=\vbox to 0pt{\kern-1ht1 \kern1ht0 \box1 \vss}
\setbox1=\hbox to 0pt{$\hss\cdot\hss$} % cdot is centered on the axis
\setbox\smalldot=\vbox to 0pt{\kern-1ht1 \kern1ht0 \box1 \vss}
% \arrows makes things like <--- text --->
\def\arrows#1#2{% #1=width, #2=text
{\setbox0=\hbox to .611111em{$\hss-\hss$}
\hbox to #1{\kern-.055556em$\leftarrow$\kern-.3888889em
\cleaders\copy0\hfil
\kern.4em #2\kern.4em
\cleaders\copy0\hfil
\kern-.3888889em$\rightarrow$\kern-.055556em}}}
% \samplebox makes the outline of a box, with big dot at reference point
\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text
{\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
\nointerlineskip
\vbox to #2{}}% now \box0 has the desired ht, dp, and wd
\hbox{\copy\bigdot
\vrule height.2pt depth.2pt width#3
\kern-#3
\makelightbox
\kern-#3
\raise#1\vbox{\hbox to #3{\hss#4\hss}
\kern 3pt}}}}
% \sampleglue makes glue between sample boxes
\def\sampleglue#1#2{% #1=width, #2=text
\vtop{\hbox to #1{\xleaders\hbox to .5vu{\hss\copy\smalldot\hss}\hfil}
\kern3pt
\tabskip 0pt plus 1fil
\halign to #1{\hfil##\cr#2\cr}}}
% indexing macros
\newwrite\inx
\immediate\openout\inx=index % file for index reminders
\let\Z=\relax
\def\leftparen{(}
\def\SP{ }
\def\specialcaret{\ifmmode\def\next{↑}\else\let\next=\xref\fi\next}
\catcode`\↑=13 \let ↑=\specialcaret
\def\xref#1{\def\next{#1}\def\silent{F}%
\ifx\next\leftparen\let\next=\silentxref
\else\def\next{\makexref#1\endxref}\fi\next}
\def\silentxref#1){\def\silent{T}\makexref#1\endxref}
\def\makexref#1#2\endxref{\def\text{#2}%
\if#1.\def\xreftype{1}%
\def\next{{\tt\spaceskip\ttglue\text}}% case 1, "." means tt text
\else\if#1:\def\xreftype{2}%
\def\next{{\tt\char`\\\text}}% case 2, ":" means tt with backslash
\else\if#1*\def\xreftype{3}%
\def\next{{\tt\char`\\\text}}% case 3, "*" means a TeX primitive
\else\if#1<\def\xreftype{4}%
\def\next{\<\text>}% case 4, "<" means angle bracketed text
\else\def\xreftype{0}\def\text{#1#2}\let\next=\text\fi\fi\fi\fi
\ifproofmode\insert\margin{\hbox{\marginstyle\text}}\fi
{\let\number=\relax
\edef\text{\write\inx{\Z\text\SP!\xreftype\SP\number\count0.}}%
\text}%
\if T\silent\ignorespaces\else\next\fi}
\def\marginstyle{\vrule height 6pt depth 2pt width 0pt \sevenrm}
% internal cross references that may change
\def\sesame{61} % page number for Sesame Street quote
\def\bmiexno{20} % exercise number for bold math italic
\def\punishexno{1} % exercise number for `punishment'
\def\checkequals#1#2 {\ifnum#1=#2\else
\errmessage{Redefine \string#1 to be \the#2}\fi}